//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Με την ονομασία "pss" αναφερόμαστε στην τελευταία στήλη του καφενείου. Αυτή η στήλη
// αφορά σε προσκλήσεις, σε αναζητήσεις και στη συζήτηση του καφενείου. Η ονομασία "pss"
// έχει τις ρίζες της σε παλαιότερες versions όπου είχαμε προσκλήσεις ("p"), συσχετίσεις
// ("s") και συζητήσεις ("s").
//
// Στη στήλη "pss" εμπεριέχονται τρεις οριζόντιες περιοχές χωρισμένες μεταξύ τους με
// οριζόντια panels τα οποία περιέχουν input fields και εικονίδια/εργαλεία. Αυτά τα
// panels είναι εξοπλισμένα και με μεθόδους μετακίνησης καθ' ύψος, με τις οποίες ο χρήστης
// μπορεί να αλλάζει τις καθ' ύψος αναλογίες των τριών περιοχών.

Kafenio.pss = {};

Kafenio.pss.setup = function() {
	Kafenio.pssDOM.

	append(Kafenio.ptitlosDOM = $('<div>').addClass('panel Hpanel')).
	append(Kafenio.prosklisiDOM = $('<div>').addClass('pssEnotita').
		append(Kafenio.prosklisiBaseDOM = $('<div>'))).

	append(Kafenio.atitlosDOM = $('<div>').addClass('panel Hpanel')).
	append(Kafenio.anazitisiDOM = $('<div>').addClass('pssEnotita')).

	append(Kafenio.stitlosDOM = $('<div>').addClass('panel Hpanel')).
	append(Kafenio.sizitisiDOM = $('<div>').addClass('pssEnotita').css('visibility', 'hidden'));

	Kafenio.ptitlosSetup();
	Kafenio.atitlosSetup();
	Kafenio.stitlosSetup();

	Kafenio.pss.inputSetup();
	Kafenio.pss.oplismos();
}

// Η μέθοδος "ptitlosSetup" διαμορφώνει το οριζόντιο panel των προσκλήσεων.
//
// Όλα τα στοιχεία του panel εγκυβωτίζονται σε div elements κλάσης "pssPanelBox".

Kafenio.ptitlosSetup = function() {
	Kafenio.ptitlosDOM.

	append($('<div>').addClass('pssPanelBox').text('Προσκλήσεις'));
}

// Η μέθοδος "atitlosSetup" διαμορφώνει το οριζόντιο panel αναζήτησης και συσχετισμού παικτών.
// Εδώ παρέχεται input πεδίο στο οποίο ο χρήστης δίνει ονομαστικά στοιχεία των παικτών που
// αναζητά, και εικονίδια/εργαλεία που αφορούν σε φιλτράρισμα των αποτελεσμάτων αναζήτησης
// ανάλογα με την κατάσταση των παικτών (online, offline, ελεύθερος κλπ), και τη συσχέτιση
// των παικτών με τον χρήστη.
//
// Όλα τα στοιχεία του panel εγκυβωτίζονται σε div elements κλάσης "pssPanelBox".

Kafenio.atitlosSetup = function() {
	Kafenio.atitlosDOM.

	append($('<div>').addClass('pssPanelBox').
	append(Kafenio.anazitisiInputDOM = $('<input>').addClass('pssInput').attr({
		name: 'anazitisi',
		type: 'text',
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox pssMetakinisi').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/misc/baresH.png',
	}).css({
		cursor: 'move',
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/anazitisi.png',
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/clear.png',
	}))
	.on('click', function(e) {
		Kafenio.anazitisiInputDOM.val('');
	})).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	on('mousedown', function(e) {
		var
		y0 = e.pageY,
		prosklisiH = Kafenio.prosklisiDOM.height();
		anazitisiH = Kafenio.anazitisiDOM.height();
		sizitisiH = Kafenio.sizitisiDOM.height();

		e.preventDefault();
		e.stopPropagation();

		Kafenio.sekinisi = true;
		Kafenio.atitlosDOM.css('cursor', 'move').
		find('.pssMetakinisi').addClass('iconCandi');
		$(document).off('mousemove mouseup').
		on('mousemove', function(e) {
			var dh, h, pH, aH, sH;

			e.stopPropagation();
			sH = sizitisiH;

			dh = e.pageY - y0;
			if (dh <= 0) {
				h = prosklisiH + dh;
				if (h < 0) h = 0;
				dh = h - prosklisiH;

				pH = prosklisiH + dh;
				aH = anazitisiH - dh;
			}
			else {
				h = anazitisiH - dh;
				if (h < 0) {
					aH = 0;
					pH = prosklisiH + anazitisiH;
					dh -= anazitisiH;

					h = sizitisiH - dh;
					if (h < 0) {
						sH = 0;
						pH += sizitisiH;
						dh = sizitisiH;
					}
					else {
						pH += dh;
						sH -= dh;
					}
				}
				else {
					pH = prosklisiH + dh;
					aH = anazitisiH - dh;
				}
			}

			Kafenio.prosklisiDOM.css('height', pH + 'px');
			Kafenio.anazitisiDOM.css('height', aH + 'px');
			Kafenio.sizitisiDOM.css('height', sH + 'px');
		}).
		on('mouseup', function(e) {
			e.stopPropagation();
			Kafenio.atitlosDOM.css('cursor', '').
			find('.pssMetakinisi').removeClass('iconCandi');
			$(document).off('mousemove mouseoff');
			if (Kafenio.sekinisi) {
				Kafenio.sekinisi = false;
				Kafenio.diastasiSave();
			}
		});
	});
}

// Η μέθοδος "stitlosSetup" διαμορφώνει το οριζόντιο panel της συζήτησης του καφενείου.
// Εδώ παρέχεται input πεδίο στο οποίο ο χρήστης γράφει τα σχόλιά του, και εικονίδια/εργαλεία
// που αφορούν σε ενέργειες που αφορούν στη συζήτηση του καφενείου, π.χ. αποστολή σχολίου,
// διαγραφή σχολίου, πάγωμα κειμένου κλπ.
//
// Όλα τα στοιχεία του panel εγκυβωτίζονται σε div elements κλάσης "pssPanelBox".

Kafenio.stitlosSetup = function() {
	Kafenio.stitlosDOM.

	// Ακολουθεί το input field της συζήτησης καφενείου.

	append($('<div>').addClass('pssPanelBox').
	append(Kafenio.sizitisiInputDOM = $('<input>').addClass('pssInput').attr({
		name: 'sizitisi',
		type: 'text',
	})).

	// Σε κάθε πληκτρισμό ελέγχουμε το πλήκτρο που έχει πατηθεί και κάνουμε τις
	// προσήκουσες ενέργειες.

	on('keyup', function(e) {
		Kafenio.sizitisiKeyup(e, Kafenio);
	})).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox pssMetakinisi').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/misc/baresH.png',
	}).css({
		cursor: 'move',
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/apostoli.png',
	})).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
		Kafenio.sizitisi.apostoli();
	})).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/clear.png',
	})).
	on('click', function(e) {
		Kafenio.sizitisiInputDOM.val('');
		Kafenio.sizitisiKatharismos(Kafenio);
	})).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/sigasi.png',
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	append($('<div>').addClass('pssPanelBox').
	append($('<img>').addClass('HpanelIcon').attr({
		src: Client.server + 'ikona/pss/pagoma.png',
		title: 'Πάγωμα κειμένου',
	}).on('click', function(e) {
		var img = $(this);
		Kafenio.inputRefocus(e);

		if (Kafenio.sizitisiDOM.data('pagomeno')) {
			Kafenio.sizitisiDOM.removeData('pagomeno').removeClass('pssPagomeno').scrollKato();
			img.attr({
				src: Client.server + 'ikona/pss/pagoma.png',
				title: 'Πάγωμα κειμένου',
			});
		}
		else {
			Kafenio.sizitisiDOM.data('pagomeno', 1).addClass('pssPagomeno');
			img.attr({
				src: Client.server + 'ikona/pss/xepagoma.png',
				title: 'Ρολάρισμα κειμένου',
			});
		}
	}))).

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	on('mousedown', function(e) {
		var
		y0 = e.pageY,
		prosklisiH = Kafenio.prosklisiDOM.height();
		anazitisiH = Kafenio.anazitisiDOM.height();
		sizitisiH = Kafenio.sizitisiDOM.height();

		e.preventDefault();
		e.stopPropagation();

		Kafenio.sekinisi = true;
		Kafenio.stitlosDOM.css('cursor', 'move').
		find('.pssMetakinisi').addClass('iconCandi');
		$(document).off('mousemove mouseup').
		on('mousemove', function(e) {
			var dh, h, pH, aH, sH;

			e.stopPropagation();
			pH = prosklisiH;

			dh = e.pageY - y0;
			if (dh >= 0) {
				h = sizitisiH - dh;
				if (h < 0) h = 0;
				dh = sizitisiH - h;

				aH = anazitisiH + dh;
				sH = sizitisiH - dh;
			}
			else {
				h = anazitisiH + dh;
				if (h < 0) {
					aH = 0;
					sH = sizitisiH + anazitisiH;
					dh += anazitisiH;

					h = prosklisiH + dh;
					if (h < 0) {
						pH = 0;
						sH += prosklisiH;
						dh = prosklisiH;
					}
					else {
						sH -= dh;
						pH += dh;
					}
				}
				else {
					sH = sizitisiH - dh;
					aH = anazitisiH + dh;
				}
			}

			Kafenio.prosklisiDOM.css('height', pH + 'px');
			Kafenio.anazitisiDOM.css('height', aH + 'px');
			Kafenio.sizitisiDOM.css('height', sH + 'px');
		}).
		on('mouseup', function(e) {
			e.stopPropagation();
			Kafenio.stitlosDOM.css('cursor', '').
			find('.pssMetakinisi').removeClass('iconCandi');
			$(document).off('mousemove mouseoff');
			if (Kafenio.sekinisi) {
				Kafenio.sekinisi = false;
				Kafenio.diastasiSave();
			}
		});
	});
}

// Η function "oplismos" αρματώνει τα εικονίδια/εργαλεία των οριζόντιων panels με
// ενέργειες που αφορούν κυρίως στη στιλιστική διαφοροποίηση των εικονιδίων σε σχέση
// με τον δείκτη του mouse.

Kafenio.pss.oplismos = function() {
	$('.HpanelIcon').parents('.pssPanelBox').
	on('mousedown', function(e) {
		if ($(this).hasClass('pssMetakinisi')) return;
		e.stopPropagation();
	}).
	on('mouseenter', function(e) {
		e.stopPropagation();
		if (Kafenio.sekinisi) return;
		$(this).addClass('iconCandi');
	}).
	on('mouseleave', function(e) {
		e.stopPropagation();
		if (Kafenio.sekinisi) return;
		$(this).removeClass('iconCandi');
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kafenio.pss.inputWidthFix = function() {
	var w;

	w = parseFloat($('#pss').outerWidth() * 0.5);
	Kafenio.sizitisiInputDOM.css('width', w + 'px');
	if (w > 300) w = 300;
	Kafenio.anazitisiInputDOM.css('width', w + 'px');
}

Kafenio.pss.inputSetup = function() {
	// Η ιδιότητα "trexonInput" δείχνει ποιο είναι το τρέχον input field στην
	// περιοχή pss.

	if (!Kafenio.trexonInput) Kafenio.trexonInput = Kafenio.sizitisiInputDOM;
	if (!Client.session.kinito) Kafenio.trexonInput.focus();

	$(document.body).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
	});

	$('.pssEnotita').
	on('click', function(e) {
		e.stopPropagation();
	});

	$('.pssInput').
	on('mousedown', function(e) {
		var fld = $(this);
		e.stopPropagation();
		if (Kafenio.trexonInput === fld) return;
		Kafenio.trexonInput = fld.focus();
	});
}

Kafenio.inputRefocus = function(e) {
	if (e) e.stopPropagation();
	if (Client.session.kinito) return;
	Kafenio.trexonInput.focus();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kafenio.sizitisi = {};

Kafenio.sizitisi.apostoli = function() {
	var sxolio;

	sxolio = Kafenio.sizitisiInputDOM.val().trim();
	if (sxolio === '') return;

	Client.skiserService('sizitisiKafenio', 'sxolio=' + sxolio.uri()).
	done(function(rsp) {
		Kafenio.sizitisiInputDOM.val('');
	}).
	fail(function(err) {
		Client.skiserFail(err);
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Η μέθοδος "enotitaStretch" διαμορφώνει τις αρχικές καθ' ύψος αναλογίες των περιοχών
// του "pss". Πρόκειται για καταμερισμό των περιοχών ανάλογα με το συνολικό ύψος της
// περιοχής "pss".

Kafenio.pss.enotitaStretch = function(oh) {
	var h, h1;

	// Εάν δεν είναι η πρώτη φορά που γίνεται επαναδιάταξη καθ' ύψος, επιχειρούμε
	// να κρατήσουμε σταθερό το κομμάτι της συζήτησης.

	if (Kafenio.hasOwnProperty('ofelimoH')) {
		h = Kafenio.pssDOM.innerHeight();
		h -= Kafenio.ptitlosDOM.outerHeight();
		h -= Kafenio.atitlosDOM.outerHeight();
		h -= Kafenio.stitlosDOM.outerHeight();

		h -= Kafenio.prosklisiDOM.outerHeight() - Kafenio.prosklisiDOM.innerHeight();
		h -= Kafenio.anazitisiDOM.outerHeight() - Kafenio.anazitisiDOM.innerHeight();
		h -= Kafenio.sizitisiDOM.outerHeight() - Kafenio.sizitisiDOM.innerHeight();

		h -= Kafenio.prosklisiDOM.innerHeight();
		h -= Kafenio.anazitisiDOM.innerHeight();

		if (h > 10) return Kafenio.sizitisiDOM.css('height', h + 'px');
	}

	// Είτε δεν στάθηκε δυνατόν να κρατήσουμε σταθερό το κομμάτι της συζήτησης, είτε
	// είναι η πρώτη φορά που γίνεται καθ' ύψος επαναδιάταξη, οπότε μοιράζουμε τις
	// ενότητες περίπου από 1/5 σε προσκλήσεις και αναζητήσεις και 3/5 στη συζήτηση.

	h = Kafenio.pssDOM.innerHeight();
	h -= Kafenio.ptitlosDOM.outerHeight();
	h -= Kafenio.atitlosDOM.outerHeight();
	h -= Kafenio.stitlosDOM.outerHeight();

	h -= Kafenio.prosklisiDOM.outerHeight() - Kafenio.prosklisiDOM.innerHeight();
	h -= Kafenio.anazitisiDOM.outerHeight() - Kafenio.anazitisiDOM.innerHeight();
	h -= Kafenio.sizitisiDOM.outerHeight() - Kafenio.sizitisiDOM.innerHeight();

	if (h < 0) h = 0;
	h1 = (h / 5) + 'px';

	Kafenio.prosklisiDOM.css('height', h1);
	Kafenio.anazitisiDOM.css('height', h1);

	h -= Kafenio.prosklisiDOM.innerHeight();
	h -= Kafenio.anazitisiDOM.innerHeight();
	if (h < 0) h = 0;
	Kafenio.sizitisiDOM.css('height', h + 'px');
}
